const CloudDBZoneWrapper = require('./CloudDBZoneWrapper')

let myHandler = async function (event, context, callback, logger) {
  logger.info(event);

  // 初始化
  const cloudDBZoneWrapper = new CloudDBZoneWrapper(logger)

  /**
   * 关于user模块的调用都会触发当前方法
   * 一般来说一个模块至少会包含一些增删查改相关的方法
   *
   * 所有我们在这里给项目定义一个规范
   * 所有的请求必须携带以下两个参数
   * 第一个参数 action 代表当前是什么操作
   * 第二个参数 payload  代表当前操作要传的参数
   *
   * 注意：有一个坑点，云函数发布到线上后接收到的参数需要转化json格式
   *
   * 在测试的时候需要传body，app调用的时候不需要
   */
  const { action, payload } = JSON.parse(event.body || "{}")


  if (action === 'add') {
    // 等待插入成功再返回
    await cloudDBZoneWrapper.add(payload)

    return callback({
      code: 0,
      desc: "新增成功."
    })
  }
  if (action === 'query') {

    const result = await cloudDBZoneWrapper.query(payload)

    const data = result.map(item => Object.fromEntries(item.getFieldMap()))


    return callback({
      code: 0,
      desc: "查询成功.",
      /**
       * 因为只有一张，所以我写死直接取第一个
       */
      data: data[0] ?? null
    })
  }

  callback({
    code: 0,
    desc: "Success.",
    action,

  });
};

export { myHandler };